
# -*- coding: utf-8 -*-

'''
Cria a base de dados
@author: Luís Fonte nº6043
Data de Criação: 24/02/2012
'''

import csv
import sqlite3


class CreateDataBase:

    #cria as tabelas com os campos presentes 
    def createTables(self):
        
        
        #criação das tabelas
        #cria a base de dados se não existir
        conn = sqlite3.connect('dataBaseFiles\dBaseRebides.db')
        cursor = conn.cursor()

        #criar a tabela docente com os campos correspondentes tal como está nos ficheiros csv
        cursor.execute('''create table if not exists docente (cod_docente INTEGER,
                                                        nomeDocente TEXT,
                                                        grau TEXT,
                                                        curso TEXT,
                                                        categoria TEXT,
                                                        regime TEXT,
                                                        ano INTEGER,
                                                        instituicao TEXT,
                                                        nomeEstabelecimento TEXT)''')
        conn.commit()
        cursor.close()
        pass
    

    #preenche a tabela docente com todos os dados dos ficheiros csv
    def fillTables(self):
            
        conn = sqlite3.connect('dataBaseFiles\dBaseRebides.db')
        cursor = conn.cursor()
        #selecciona todos os ficheiros csv pelo ano para introduzir os dados
        for csvFile in range(0,11):
            spamReader = csv.reader(open('csvFiles/reb'+str(csvFile)+'.csv', 'rb'), delimiter=',')
	    #por cada linha insere os dados nos campos correspondentes
            for row in spamReader:
                insertData ='''insert into docente (cod_docente,
                                                    nomeDocente,
                                                    grau,
                                                    curso,
                                                    categoria,
                                                    regime,
                                                    ano,
                                                    instituicao,
                                                    nomeEstabelecimento)
                        values("{0}", "{1}", "{2}", "{3}", "{4}", "{5}", "{6}", "{7}", "{8}")'''.\
                format(str(row[0]).replace('\"',' '),
                       str(row[1]).replace('\"',' '),
                       str(row[2]).replace('\"',' '),
                       str(row[3]).replace('\"',' '),
                       str(row[4]).replace('\"',' '),
                       str(row[5]).replace('\"',' '),
                       str(row[6]).replace('\"',' '),
                       str(row[7]).replace('\"',' '),
                       str(row[8]).replace('\"',' '))
                cursor.execute(insertData)
                pass
        pass
        
        conn.commit()
        cursor.close()
        pass


    #Efectua a estatistica num de estabelecimentos por ano
    def stat1(self, ano):
        #conecta com o ficheiro da bd
        con = sqlite3.connect('dataBaseFiles\dBaseRebides.db')
        cur = con.cursor()
        #Efectua a Query
        cur.execute(""" SELECT nomeEstabelecimento FROM docente WHERE ano="{0}" """.format(ano))

        #métodos retirados de http://effbot.org/zone/python-list.htm - manipulação de listas
        #guarda os dados da query numa lista para poder manipular a seguir
        fetch = cur.fetchall()
        queryListed = []
        for row in fetch:
            queryListed.append(row)
            pass

        print (len(queryListed))

        #verifica os nomes dos estabelecimentos e a cada um novo nome que encontra
        #incrementa 1 no contador, a fim de no final o contador ter o numero de estabelecimentos no ano escolhido
        counter = 0
        for x in range (0, len(queryListed)-1):
            if (cmp(queryListed[x], queryListed[x+1]) == 0):
                counter
            else:
                counter +=1
        pass

        print (counter)    
        
        pass
    
    #Efectua a estatistica num de docentes por categoria, estabelecimento e ano
    def stat2(self, categoria, nomeEstabelecimento, ano):
        #conecta com o ficheiro da bd
        con = sqlite3.connect('dataBaseFiles\dBaseRebides.db')
        cur = con.cursor()
        #Efectua a Query
        cur.execute(""" SELECT nomeDocente FROM docente WHERE categoria='{0}' and nomeEstabelecimento='{1}' and ano='{2}' """.format(categoria, nomeEstabelecimento, ano))

        #métodos retirados de http://effbot.org/zone/python-list.htm - manipulação de listas
        #guarda os dados da query numa lista para poder manipular a seguir
        #apresenta o resultado sem ter a formatacao recolhida do ficheiro da bd - apresenta so o numero
        fetch = cur.fetchall()
        queryList = []
        for row in fetch:
            queryList.append(row)
            pass
        result = len(queryList)
        print (result)
        cur.close()
        pass

    def stat3(self, grau, nomeEstabelecimento, categoria, ano):
        #conecta com o ficheiro da bd
        con = sqlite3.connect('dataBaseFiles\dBaseRebides.db')
        cur = con.cursor()
        #Efectua a Query
        cur.execute(""" SELECT nomeDocente FROM docente WHERE grau='{0}' and nomeEstabelecimento='{1}' and categoria='{2}' and ano='{3}' """.format(grau, nomeEstabelecimento, categoria, ano))
        
        #métodos retirados de http://effbot.org/zone/python-list.htm - manipulação de listas
        #guarda os dados da query numa lista para poder manipular a seguir
        #apresenta o resultado sem ter a formatacao recolhida do ficheiro da bd - apresenta so o numero
        fetch = cur.fetchall()
        queryList = []
        for row in fetch:
            queryList.append(row)
            pass
        result = len(queryList)
        print (result)
        cur.close()
        pass



yeah = CreateDataBase()
#yeah.createTables()
#yeah.fillTables()
#yeah.stat1(2000)
#yeah.stat2('Outra', 'Academia da Força Aérea - Escola Superior de Tecnologias Militares Aeronáuticas', 2000)
#yeah.stat3('Licenciatura', 'Academia da Força Aérea - Escola Superior de Tecnologias Militares Aeronáuticas', 'Outra', 2000)
